package com.chenjun.designpattern.structural.proxy;

/**
 * Subject：抽象主题角色，抽象主题类可以是抽象类，也可以是接口，
 * 是一个最普通的业务类型定义，无特殊要求。
RealSubject：具体主题角色，也叫被委托角色、被代理角色。是业务逻辑的具体执行者。
Proxy：代理主题角色，也叫委托类、代理类。它把所有抽象主题类定义的方法给具体主题角色实现，
并且在具体主题角色处理完毕前后做预处理和善后工作。（最简单的比如打印日志）
 * @author admin
 *
 */
public class 代理模式1
{

	public static void main(String[] args)
	{
		//方法1
		Subject subject = new RealSubject();
		Proxy proxy = new Proxy(subject);
		proxy.operate();
		
		//方法2
		new Proxy(new Subject()
		{
			Subject subject = new RealSubject();
			@Override
			public void operate()
			{
				System.out.println("1111");
				subject.operate();
				System.out.println("2222");
			}
		}).operate();
	}

}

interface Subject
{
	public void operate();
}

class RealSubject implements Subject
{
	@Override
	public void operate()
	{
		System.out.println("realsubject operatestarted......");
	}
}

class Proxy implements Subject
{
	private Subject subject;
	
	public Proxy(Subject subject)
	{
		this.subject = subject;
	}
	
	@Override
	public void operate()
	{
		System.out.println("before operare....");
		subject.operate();
		System.out.println("after operare....");
	}
}


